/**
 * 营养图表分析页面的JavaScript功能
 */

// 当前用户ID（实际应用中应从登录状态获取）
let currentUserId = 1;

// 图表实例
let nutritionTrendChart = null;
let nutritionRatioChart = null;
let calorieGaugeChart = null;
let nutritionComparisonChart = null;
let foodCategoryDistributionChart = null;
let bmiTrendChart = null;

// 当前选择的周期
let currentPeriod = 'daily';
let currentComparisonPeriod = 'weekly';
let currentFoodPeriod = 'weekly';

// 存储图表数据的全局对象
let chartData = {
    nutritionTrend: null,
    nutritionRatio: null,
    calorieGauge: null,
    nutritionComparison: null,
    foodCategoryDistribution: null,
    bmiTrend: null
};

// 页面加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
    // 初始化日期选择器
    initDatePicker();
    
    // 初始化周期选择器
    initPeriodSelectors();
    
    // 初始化图表
    initCharts();
    
    // 加载按钮点击事件
    document.getElementById('load-charts').addEventListener('click', function() {
        loadAllCharts();
    });
    
    // 初始化下载图片和导出Excel按钮事件
    initChartActions();
});

/**
 * 初始化日期选择器
 */
function initDatePicker() {
    // 设置默认日期范围（最近7天）
    const today = new Date();
    const oneWeekAgo = new Date();
    oneWeekAgo.setDate(today.getDate() - 7);
    
    document.getElementById('start-date').valueAsDate = oneWeekAgo;
    document.getElementById('end-date').valueAsDate = today;
}

/**
 * 初始化周期选择器
 */
function initPeriodSelectors() {
    // 营养素占比周期选择器
    document.querySelectorAll('.period-selector').forEach(button => {
        button.addEventListener('click', function() {
            // 移除所有按钮的active类
            document.querySelectorAll('.period-selector').forEach(btn => {
                btn.classList.remove('active', 'bg-blue-700', 'text-white');
                btn.classList.add('text-gray-900', 'bg-white');
            });
            
            // 添加当前按钮的active类
            this.classList.add('active', 'bg-blue-700', 'text-white');
            this.classList.remove('text-gray-900', 'bg-white');
            
            // 更新当前周期
            currentPeriod = this.dataset.period;
            
            // 重新加载营养素占比图表
            loadNutritionRatioChart();
        });
    });
    
    // 营养素摄入与推荐值对比周期选择器
    document.querySelectorAll('.comparison-period-selector').forEach(button => {
        button.addEventListener('click', function() {
            // 移除所有按钮的active类
            document.querySelectorAll('.comparison-period-selector').forEach(btn => {
                btn.classList.remove('active', 'bg-blue-700', 'text-white');
                btn.classList.add('text-gray-900', 'bg-white');
            });
            
            // 添加当前按钮的active类
            this.classList.add('active', 'bg-blue-700', 'text-white');
            this.classList.remove('text-gray-900', 'bg-white');
            
            // 更新当前周期
            currentComparisonPeriod = this.dataset.period;
            
            // 重新加载营养素摄入与推荐值对比图表
            loadNutritionComparisonChart();
        });
    });
    
    // 食物类型摄入分布周期选择器
    document.querySelectorAll('.food-period-selector').forEach(button => {
        button.addEventListener('click', function() {
            // 移除所有按钮的active类
            document.querySelectorAll('.food-period-selector').forEach(btn => {
                btn.classList.remove('active', 'bg-blue-700', 'text-white');
                btn.classList.add('text-gray-900', 'bg-white');
            });
            
            // 添加当前按钮的active类
            this.classList.add('active', 'bg-blue-700', 'text-white');
            this.classList.remove('text-gray-900', 'bg-white');
            
            // 更新当前周期
            currentFoodPeriod = this.dataset.period;
            
            // 重新加载食物类型摄入分布图表
            loadFoodCategoryDistributionChart();
        });
    });
}

/**
 * 初始化图表
 */
function initCharts() {
    // 初始化营养趋势图
    nutritionTrendChart = echarts.init(document.getElementById('nutrition-trend-chart'));
    
    // 初始化营养素占比饼图
    nutritionRatioChart = echarts.init(document.getElementById('nutrition-ratio-chart'));
    
    // 初始化热量摄入目标完成情况仪表盘
    calorieGaugeChart = echarts.init(document.getElementById('calorie-gauge-chart'));
    
    // 初始化营养素摄入与推荐值对比条形图
    nutritionComparisonChart = echarts.init(document.getElementById('nutrition-comparison-chart'));
    
    // 初始化食物类型摄入分布雷达图
    foodCategoryDistributionChart = echarts.init(document.getElementById('food-category-chart'));
    
    // 初始化BMI趋势折线图
    bmiTrendChart = echarts.init(document.getElementById('bmi-trend-chart'));
    
    // 窗口大小改变时，重新调整图表大小
    window.addEventListener('resize', function() {
        nutritionTrendChart.resize();
        nutritionRatioChart.resize();
        calorieGaugeChart.resize();
        nutritionComparisonChart.resize();
        foodCategoryDistributionChart.resize();
        bmiTrendChart.resize();
    });
}

/**
 * 加载所有图表
 */
function loadAllCharts() {
    // 获取日期范围
    const startDate = document.getElementById('start-date').value;
    const endDate = document.getElementById('end-date').value;
    
    // 验证日期范围
    if (!startDate || !endDate) {
        showNotification('请选择日期范围', 'error');
        return;
    }
    
    if (new Date(startDate) > new Date(endDate)) {
        showNotification('开始日期不能晚于结束日期', 'error');
        return;
    }
    
    // 加载营养趋势图
    loadNutritionTrendChart(startDate, endDate);
    
    // 加载营养素占比饼图
    loadNutritionRatioChart();
    
    // 加载热量摄入目标完成情况仪表盘
    loadCalorieGaugeChart();
    
    // 加载营养素摄入与推荐值对比条形图
    loadNutritionComparisonChart();
    
    // 加载食物类型摄入分布雷达图
    loadFoodCategoryDistributionChart();
    
    // 加载BMI趋势折线图
    loadBMITrendChart(startDate, endDate);
}

/**
 * 加载营养趋势图
 * @param {string} startDate - 开始日期
 * @param {string} endDate - 结束日期
 */
async function loadNutritionTrendChart(startDate, endDate) {
    try {
        // 显示加载中状态
        nutritionTrendChart.showLoading();
        
        // 调用API获取营养趋势数据
        const data = await window.apiService.dietRecord.getNutritionTrend(
            currentUserId,
            startDate,
            endDate
        );
        
        // 保存数据到全局对象
        chartData.nutritionTrend = data;
        
        // 隐藏加载中状态
        nutritionTrendChart.hideLoading();
        
        // 设置图表选项
        const option = {
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'cross',
                    label: {
                        backgroundColor: '#6a7985'
                    }
                }
            },
            legend: {
                data: ['卡路里', '蛋白质', '碳水化合物', '脂肪']
            },
            grid: {
                left: '3%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
            xAxis: {
                type: 'category',
                boundaryGap: false,
                data: data.dates
            },
            yAxis: [
                {
                    type: 'value',
                    name: '卡路里 (kcal)',
                    position: 'left',
                    axisLine: {
                        show: true,
                        lineStyle: {
                            color: '#FF7043'
                        }
                    },
                    axisLabel: {
                        formatter: '{value} kcal'
                    }
                },
                {
                    type: 'value',
                    name: '营养素 (g)',
                    position: 'right',
                    axisLine: {
                        show: true,
                        lineStyle: {
                            color: '#4CAF50'
                        }
                    },
                    axisLabel: {
                        formatter: '{value} g'
                    }
                }
            ],
            series: [
                {
                    name: '卡路里',
                    type: 'line',
                    yAxisIndex: 0,
                    data: data.calories,
                    itemStyle: {
                        color: '#FF7043'
                    },
                    lineStyle: {
                        width: 3
                    },
                    areaStyle: {
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                            {
                                offset: 0,
                                color: 'rgba(255, 112, 67, 0.5)'
                            },
                            {
                                offset: 1,
                                color: 'rgba(255, 112, 67, 0.1)'
                            }
                        ])
                    }
                },
                {
                    name: '蛋白质',
                    type: 'line',
                    yAxisIndex: 1,
                    data: data.protein,
                    itemStyle: {
                        color: '#4CAF50'
                    }
                },
                {
                    name: '碳水化合物',
                    type: 'line',
                    yAxisIndex: 1,
                    data: data.carbohydrates,
                    itemStyle: {
                        color: '#2196F3'
                    }
                },
                {
                    name: '脂肪',
                    type: 'line',
                    yAxisIndex: 1,
                    data: data.fat,
                    itemStyle: {
                        color: '#FFC107'
                    }
                }
            ]
        };
        
        // 设置图表
        nutritionTrendChart.setOption(option);
    } catch (error) {
        console.error('加载营养趋势图失败:', error);
        nutritionTrendChart.hideLoading();
        showNotification('加载营养趋势图失败', 'error');
    }
}

/**
 * 加载营养素占比饼图
 */
async function loadNutritionRatioChart() {
    try {
        // 显示加载中状态
        nutritionRatioChart.showLoading();
        
        // 获取当前日期
        const today = new Date().toISOString().split('T')[0];
        
        // 调用API获取营养素占比数据
        const data = await window.apiService.dietRecord.getNutritionRatio(
            currentUserId,
            today,
            currentPeriod
        );
        
        // 保存数据到全局对象
        chartData.nutritionRatio = data;
        
        // 隐藏加载中状态
        nutritionRatioChart.hideLoading();
        
        // 设置图表选项
        const option = {
            tooltip: {
                trigger: 'item',
                formatter: '{a} <br/>{b}: {c} ({d}%)'
            },
            legend: {
                orient: 'vertical',
                left: 10,
                data: data.nutritionRatio.map(item => item.name)
            },
            series: [
                {
                    name: '营养素占比',
                    type: 'pie',
                    radius: ['50%', '70%'],
                    avoidLabelOverlap: false,
                    label: {
                        show: false,
                        position: 'center'
                    },
                    emphasis: {
                        label: {
                            show: true,
                            fontSize: '18',
                            fontWeight: 'bold'
                        }
                    },
                    labelLine: {
                        show: false
                    },
                    data: [
                        {
                            value: data.nutritionRatio[0].value,
                            name: data.nutritionRatio[0].name,
                            itemStyle: { color: '#4CAF50' }
                        },
                        {
                            value: data.nutritionRatio[1].value,
                            name: data.nutritionRatio[1].name,
                            itemStyle: { color: '#2196F3' }
                        },
                        {
                            value: data.nutritionRatio[2].value,
                            name: data.nutritionRatio[2].name,
                            itemStyle: { color: '#FFC107' }
                        }
                    ]
                }
            ]
        };
        
        // 设置图表
        nutritionRatioChart.setOption(option);
    } catch (error) {
        console.error('加载营养素占比饼图失败:', error);
        nutritionRatioChart.hideLoading();
        showNotification('加载营养素占比饼图失败', 'error');
    }
}

/**
 * 加载热量摄入目标完成情况仪表盘
 */
async function loadCalorieGaugeChart() {
    try {
        // 显示加载中状态
        calorieGaugeChart.showLoading();
        
        // 获取当前日期
        const today = new Date().toISOString().split('T')[0];
        
        // 调用API获取热量摄入目标完成情况数据
        const data = await window.apiService.dietRecord.getCalorieGoalCompletion(
            currentUserId,
            today
        );
        
        // 保存数据到全局对象
        chartData.calorieGauge = data;
        
        // 隐藏加载中状态
        calorieGaugeChart.hideLoading();
        
        // 设置图表选项
        const option = {
            series: [
                {
                    type: 'gauge',
                    startAngle: 180,
                    endAngle: 0,
                    min: 0,
                    max: 100,
                    splitNumber: 10,
                    axisLine: {
                        lineStyle: {
                            width: 30,
                            color: [
                                [0.3, '#FF6E76'],
                                [0.7, '#FDDD60'],
                                [1, '#7CFFB2']
                            ]
                        }
                    },
                    pointer: {
                        icon: 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z',
                        length: '12%',
                        width: 20,
                        offsetCenter: [0, '-60%'],
                        itemStyle: {
                            color: 'auto'
                        }
                    },
                    axisTick: {
                        length: 12,
                        lineStyle: {
                            color: 'auto',
                            width: 2
                        }
                    },
                    splitLine: {
                        length: 20,
                        lineStyle: {
                            color: 'auto',
                            width: 5
                        }
                    },
                    axisLabel: {
                        color: '#464646',
                        fontSize: 20,
                        distance: -60,
                        formatter: function (value) {
                            if (value === 0 || value === 100) {
                                return value + '%';
                            } else {
                                return '';
                            }
                        }
                    },
                    title: {
                        offsetCenter: [0, '-20%'],
                        fontSize: 20
                    },
                    detail: {
                        fontSize: 30,
                        offsetCenter: [0, '0%'],
                        valueAnimation: true,
                        formatter: function (value) {
                            return Math.round(value) + '%';
                        },
                        color: 'auto'
                    },
                    data: [
                        {
                            value: data.percentage,
                            name: '目标完成率'
                        }
                    ]
                }
            ],
            tooltip: {
                formatter: `已摄入: ${Math.round(data.caloriesConsumed)} kcal<br/>目标: ${Math.round(data.caloriesGoal)} kcal<br/>完成率: ${data.percentage}%`
            }
        };
        
        // 设置图表
        calorieGaugeChart.setOption(option);
    } catch (error) {
        console.error('加载热量摄入目标完成情况仪表盘失败:', error);
        calorieGaugeChart.hideLoading();
        showNotification('加载热量摄入目标完成情况仪表盘失败', 'error');
    }
}

/**
 * 显示通知
 * @param {string} message - 通知消息
 * @param {string} type - 通知类型（success, error, info）
 */
function showNotification(message, type = 'info') {
    // 创建通知元素
    const notification = document.createElement('div');
    notification.className = `fixed top-4 right-4 p-4 rounded-lg shadow-lg z-50 ${
        type === 'success' ? 'bg-green-500' : 
        type === 'error' ? 'bg-red-500' : 
        'bg-blue-500'
    } text-white`;
    
    notification.textContent = message;
    
    // 添加到页面
    document.body.appendChild(notification);
    
    // 3秒后移除
    setTimeout(() => {
        notification.classList.add('opacity-0', 'transition-opacity', 'duration-500');
        setTimeout(() => {
            document.body.removeChild(notification);
        }, 500);
    }, 3000);
}

/**
 * 加载营养素摄入与推荐值对比条形图
 */
async function loadNutritionComparisonChart() {
    try {
        // 显示加载中状态
        nutritionComparisonChart.showLoading();
        
        // 获取当前日期
        const today = new Date().toISOString().split('T')[0];
        
        // 调用API获取营养素摄入与推荐值对比数据
        const data = await window.apiService.dietRecord.getNutritionComparison(
            currentUserId,
            today,
            currentComparisonPeriod
        );
        
        // 保存数据到全局对象
        chartData.nutritionComparison = data;
        
        // 隐藏加载中状态
        nutritionComparisonChart.hideLoading();
        
        // 设置图表选项
        const option = {
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'shadow'
                }
            },
            legend: {
                data: ['推荐摄入量', '实际摄入量']
            },
            grid: {
                left: '3%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
            xAxis: {
                type: 'value',
                boundaryGap: [0, 0.01]
            },
            yAxis: {
                type: 'category',
                data: data.nutritionComparison.map(item => item.nutrient)
            },
            series: [
                {
                    name: '推荐摄入量',
                    type: 'bar',
                    data: data.nutritionComparison.map(item => Math.round(item.recommended)),
                    itemStyle: {
                        color: '#4CAF50'
                    }
                },
                {
                    name: '实际摄入量',
                    type: 'bar',
                    data: data.nutritionComparison.map(item => Math.round(item.actual)),
                    itemStyle: {
                        color: '#2196F3'
                    }
                }
            ]
        };
        
        // 设置图表
        nutritionComparisonChart.setOption(option);
    } catch (error) {
        console.error('加载营养素摄入与推荐值对比条形图失败:', error);
        nutritionComparisonChart.hideLoading();
        showNotification('加载营养素摄入与推荐值对比条形图失败', 'error');
    }
}

/**
 * 加载食物类型摄入分布雷达图
 */
async function loadFoodCategoryDistributionChart() {
    try {
        // 显示加载中状态
        foodCategoryDistributionChart.showLoading();
        
        // 获取当前日期
        const today = new Date().toISOString().split('T')[0];
        
        // 调用API获取食物类型摄入分布数据
        const data = await window.apiService.dietRecord.getFoodCategoryDistribution(
            currentUserId,
            currentFoodPeriod,
            today
        );
        
        // 保存数据到全局对象
        chartData.foodCategoryDistribution = data;
        
        // 隐藏加载中状态
        foodCategoryDistributionChart.hideLoading();
        
        // 准备雷达图数据
        const categories = data.categoryDistribution.map(item => item.category);
        const values = data.categoryDistribution.map(item => item.consumptionCount);
        
        // 中文类别名称映射
        const categoryNameMap = {
            'FRUITS': '水果',
            'VEGETABLES': '蔬菜',
            'PROTEINS': '蛋白质',
            'GRAINS': '谷物',
            'DAIRY': '乳制品',
            'FATS_AND_OILS': '油脂',
            'SWEETS': '甜食',
            'BEVERAGES': '饮料',
            'SNACKS': '零食',
            'PREPARED_FOODS': '加工食品',
            'OTHER': '其他'
        };
        
        // 转换类别名称为中文
        const chineseCategories = categories.map(category => categoryNameMap[category] || category);
        
        // 设置图表选项
        const option = {
            title: {
                text: `${currentFoodPeriod === 'weekly' ? '每周' : '每月'}食物类型摄入分布`,
                left: 'center'
            },
            tooltip: {
                trigger: 'item'
            },
            legend: {
                type: 'scroll',
                bottom: 10,
                data: chineseCategories
            },
            radar: {
                // 雷达图的指示器，用来指定雷达图中的多个变量
                indicator: chineseCategories.map((category, index) => {
                    // 计算所有值的最大值，用于设置雷达图的最大值
                    const maxValue = Math.max(...values) * 1.2;
                    return {
                        name: category,
                        max: maxValue
                    };
                })
            },
            series: [
                {
                    name: '食物类型摄入次数',
                    type: 'radar',
                    data: [
                        {
                            value: values,
                            name: '摄入次数',
                            areaStyle: {
                                color: new echarts.graphic.RadialGradient(0.5, 0.5, 1, [
                                    {
                                        color: 'rgba(76, 175, 80, 0.6)',
                                        offset: 0
                                    },
                                    {
                                        color: 'rgba(76, 175, 80, 0.1)',
                                        offset: 1
                                    }
                                ])
                            },
                            lineStyle: {
                                color: '#4CAF50',
                                width: 2
                            },
                            itemStyle: {
                                color: '#4CAF50'
                            }
                        }
                    ]
                }
            ]
        };
        
        // 设置图表
        foodCategoryDistributionChart.setOption(option);
    } catch (error) {
        console.error('加载食物类型摄入分布雷达图失败:', error);
        foodCategoryDistributionChart.hideLoading();
        showNotification('加载食物类型摄入分布雷达图失败', 'error');
    }
}

/**
 * 加载BMI趋势折线图
 * @param {string} startDate - 开始日期
 * @param {string} endDate - 结束日期
 */
async function loadBMITrendChart(startDate, endDate) {
    try {
        // 显示加载中状态
        bmiTrendChart.showLoading();
        
        // 调用API获取BMI趋势数据
        const data = await window.apiService.dietRecord.getBMITrend(
            currentUserId,
            startDate,
            endDate
        );
        
        // 保存数据到全局对象
        chartData.bmiTrend = data;
        
        // 隐藏加载中状态
        bmiTrendChart.hideLoading();
        
        // 设置图表选项
        const option = {
            title: {
                text: 'BMI与体重趋势',
                left: 'center'
            },
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'cross',
                    label: {
                        backgroundColor: '#6a7985'
                    }
                },
                formatter: function(params) {
                    const bmiData = params[0];
                    const weightData = params[1];
                    return `${bmiData.axisValue}<br/>
                            ${bmiData.marker} ${bmiData.seriesName}: ${bmiData.value}<br/>
                            ${weightData.marker} ${weightData.seriesName}: ${weightData.value} kg`;
                }
            },
            legend: {
                data: ['BMI', '体重'],
                bottom: 10
            },
            grid: {
                left: '3%',
                right: '4%',
                bottom: '15%',
                containLabel: true
            },
            xAxis: {
                type: 'category',
                boundaryGap: false,
                data: data.dates,
                axisLabel: {
                    rotate: 45
                }
            },
            yAxis: [
                {
                    type: 'value',
                    name: 'BMI',
                    position: 'left',
                    axisLine: {
                        show: true,
                        lineStyle: {
                            color: '#FF7043'
                        }
                    },
                    axisLabel: {
                        formatter: '{value}'
                    },
                    splitLine: {
                        show: false
                    }
                },
                {
                    type: 'value',
                    name: '体重 (kg)',
                    position: 'right',
                    axisLine: {
                        show: true,
                        lineStyle: {
                            color: '#2196F3'
                        }
                    },
                    axisLabel: {
                        formatter: '{value} kg'
                    }
                }
            ],
            series: [
                {
                    name: 'BMI',
                    type: 'line',
                    yAxisIndex: 0,
                    data: data.bmiValues,
                    itemStyle: {
                        color: '#FF7043'
                    },
                    lineStyle: {
                        width: 3
                    },
                    markLine: {
                        silent: true,
                        lineStyle: {
                            color: '#999'
                        },
                        data: [
                            {
                                yAxis: 18.5,
                                name: '偏瘦'
                            },
                            {
                                yAxis: 24,
                                name: '正常'
                            },
                            {
                                yAxis: 28,
                                name: '超重'
                            }
                        ]
                    }
                },
                {
                    name: '体重',
                    type: 'line',
                    yAxisIndex: 1,
                    data: data.weightValues,
                    itemStyle: {
                        color: '#2196F3'
                    }
                }
            ]
        };
        
        // 设置图表
        bmiTrendChart.setOption(option);
    } catch (error) {
        console.error('加载BMI趋势折线图失败:', error);
        bmiTrendChart.hideLoading();
        showNotification('加载BMI趋势折线图失败', 'error');
    }
}

/**
     * 初始化图表操作按钮事件
     */
    function initChartActions() {
        // 下载图片按钮事件
        document.querySelectorAll('.download-image').forEach(button => {
            button.addEventListener('click', function() {
                const chartId = this.getAttribute('data-chart');
                downloadChartImage(chartId);
            });
        });
        
        // 导出Excel按钮事件
        document.querySelectorAll('.export-excel').forEach(button => {
            button.addEventListener('click', function() {
                const chartId = this.getAttribute('data-chart');
                exportChartToExcel(chartId);
            });
        });
    }
    
    /**
     * 下载图表为图片
     * @param {string} chartId - 图表容器ID
     */
    function downloadChartImage(chartId) {
        let chart;
        let fileName;
        
        // 根据图表ID获取对应的图表实例
        switch (chartId) {
            case 'nutrition-trend-chart':
                chart = nutritionTrendChart;
                fileName = '营养趋势图';
                break;
            case 'nutrition-ratio-chart':
                chart = nutritionRatioChart;
                fileName = '营养素占比';
                break;
            case 'calorie-gauge-chart':
                chart = calorieGaugeChart;
                fileName = '热量摄入目标完成情况';
                break;
            case 'nutrition-comparison-chart':
                chart = nutritionComparisonChart;
                fileName = '营养素摄入与推荐值对比';
                break;
            case 'food-category-chart':
                chart = foodCategoryDistributionChart;
                fileName = '食物类型摄入分布';
                break;
            case 'bmi-trend-chart':
                chart = bmiTrendChart;
                fileName = 'BMI趋势分析';
                break;
            default:
                console.error('未知的图表ID:', chartId);
                return;
        }
        
        if (!chart) {
            showNotification('图表尚未加载，请先加载图表', 'error');
            return;
        }
        
        try {
            // 获取图表的数据URL
            const url = chart.getDataURL({
                type: 'png',
                pixelRatio: 2,
                backgroundColor: '#fff'
            });
            
            // 创建下载链接
            const link = document.createElement('a');
            link.download = `${fileName}_${new Date().toISOString().split('T')[0]}.png`;
            link.href = url;
            link.click();
            
            showNotification(`${fileName}已下载为图片`, 'success');
        } catch (error) {
            console.error('下载图表图片失败:', error);
            showNotification('下载图表图片失败', 'error');
        }
    }
    
    /**
     * 导出图表数据为Excel
     * @param {string} chartId - 图表容器ID
     */
    function exportChartToExcel(chartId) {
        let data;
        let fileName;
        let sheetName;
        
        // 根据图表ID获取对应的图表数据
        switch (chartId) {
            case 'nutrition-trend-chart':
                data = chartData.nutritionTrend;
                fileName = '营养趋势数据';
                sheetName = '营养趋势';
                if (data) {
                    // 转换为Excel格式
                    const excelData = [
                        ['日期', '卡路里(kcal)', '蛋白质(g)', '碳水化合物(g)', '脂肪(g)']
                    ];
                    
                    for (let i = 0; i < data.dates.length; i++) {
                        excelData.push([
                            data.dates[i],
                            data.calories[i],
                            data.protein[i],
                            data.carbohydrates[i],
                            data.fat[i]
                        ]);
                    }
                    
                    exportToExcel(excelData, fileName, sheetName);
                }
                break;
                
            case 'nutrition-ratio-chart':
                data = chartData.nutritionRatio;
                fileName = '营养素占比数据';
                sheetName = '营养素占比';
                if (data) {
                    // 转换为Excel格式
                    const excelData = [
                        ['营养素', '占比(%)']
                    ];
                    
                    data.nutritionRatio.forEach(item => {
                        excelData.push([item.name, item.value]);
                    });
                    
                    exportToExcel(excelData, fileName, sheetName);
                }
                break;
                
            case 'calorie-gauge-chart':
                data = chartData.calorieGauge;
                fileName = '热量摄入目标完成情况';
                sheetName = '热量目标';
                if (data) {
                    // 转换为Excel格式
                    const excelData = [
                        ['指标', '数值'],
                        ['已摄入(kcal)', data.caloriesConsumed],
                        ['目标(kcal)', data.caloriesGoal],
                        ['完成率(%)', data.percentage]
                    ];
                    
                    exportToExcel(excelData, fileName, sheetName);
                }
                break;
                
            case 'nutrition-comparison-chart':
                data = chartData.nutritionComparison;
                fileName = '营养素摄入与推荐值对比';
                sheetName = '营养素对比';
                if (data) {
                    // 转换为Excel格式
                    const excelData = [
                        ['营养素', '推荐摄入量(g)', '实际摄入量(g)']
                    ];
                    
                    data.nutritionComparison.forEach(item => {
                        excelData.push([item.nutrient, item.recommended, item.actual]);
                    });
                    
                    exportToExcel(excelData, fileName, sheetName);
                }
                break;
                
            case 'food-category-chart':
                data = chartData.foodCategoryDistribution;
                fileName = '食物类型摄入分布';
                sheetName = '食物类型';
                if (data) {
                    // 转换为Excel格式
                    const excelData = [
                        ['食物类型', '摄入次数']
                    ];
                    
                    data.categoryDistribution.forEach(item => {
                        excelData.push([item.category, item.consumptionCount]);
                    });
                    
                    exportToExcel(excelData, fileName, sheetName);
                }
                break;
                
            case 'bmi-trend-chart':
                data = chartData.bmiTrend;
                fileName = 'BMI趋势分析';
                sheetName = 'BMI趋势';
                if (data) {
                    // 转换为Excel格式
                    const excelData = [
                        ['日期', 'BMI值', '体重(kg)']
                    ];
                    
                    for (let i = 0; i < data.dates.length; i++) {
                        excelData.push([
                            data.dates[i],
                            data.bmiValues[i],
                            data.weightValues[i]
                        ]);
                    }
                    
                    exportToExcel(excelData, fileName, sheetName);
                }
                break;
                
            default:
                console.error('未知的图表ID:', chartId);
                return;
        }
        
        if (!data) {
            showNotification('图表数据尚未加载，请先加载图表', 'error');
        }
    }
    
    /**
     * 导出数据到Excel文件
     * @param {Array} data - 要导出的数据
     * @param {string} fileName - 文件名
     * @param {string} sheetName - 工作表名
     */
    function exportToExcel(data, fileName, sheetName) {
        try {
            // 创建工作簿
            const wb = XLSX.utils.book_new();
            
            // 创建工作表
            const ws = XLSX.utils.aoa_to_sheet(data);
            
            // 将工作表添加到工作簿
            XLSX.utils.book_append_sheet(wb, ws, sheetName);
            
            // 生成Excel文件并下载
            XLSX.writeFile(wb, `${fileName}_${new Date().toISOString().split('T')[0]}.xlsx`);
            
            showNotification(`${fileName}已导出为Excel文件`, 'success');
        } catch (error) {
            console.error('导出Excel失败:', error);
            showNotification('导出Excel失败', 'error');
        }
    }

